﻿using System;
namespace Producers.Karis.Xtee.Riik.Ee.Producer.Karis {
    
    
    [global::Xtee.Core.Attributes.XmlTypeAttribute(Name="karistusandmed", Namespace="http://producers.karis.xtee.riik.ee/producer/karis", Target=typeof(Karistusandmed))]
    public class KaristusandmedSerializer : global::Xtee.Core.Types.AbstractXteeSerializable {
        
        protected IKaristusandmed clazz;
        
        public KaristusandmedSerializer(IKaristusandmed clazz) {
            this.clazz = clazz;
        }
        
        public override void WriteXml(global::Xtee.Core.IXteeXmlWriter Writer) {
            base.WriteXml(Writer);
            Writer.WriteStartElement("ttKokku.cKar_tyyp");
            if (clazz.TtKokkucKarTyyp!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "string");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdString(((string)(clazz.TtKokkucKarTyyp))).ToString());
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : TtKokkucKarTyyp");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.cKar_olek");
            if (clazz.TtKokkucKarOlek!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "string");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdString(((string)(clazz.TtKokkucKarOlek))).ToString());
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : TtKokkucKarOlek");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.cOtsus_liik");
            if (clazz.TtKokkucOtsusLiik!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "string");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdString(((string)(clazz.TtKokkucOtsusLiik))).ToString());
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : TtKokkucOtsusLiik");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.cOtsustaja");
            if (clazz.TtKokkucOtsustaja!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "string");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdString(((string)(clazz.TtKokkucOtsustaja))).ToString());
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.cAsja_nr");
            if (clazz.TtKokkucAsjaNr!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "string");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdString(((string)(clazz.TtKokkucAsjaNr))).ToString());
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.cKohtu_asja_nr");
            if (clazz.TtKokkucKohtuAsjaNr!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "string");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdString(((string)(clazz.TtKokkucKohtuAsjaNr))).ToString());
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.dRik_kpv");
            if (clazz.TtKokkudRikKpv!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "date");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdDate(((System.DateTime)(clazz.TtKokkudRikKpv))).ToString());
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.dAeg_kpv");
            if (clazz.TtKokkudAegKpv!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "date");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdDate(((System.DateTime)(clazz.TtKokkudAegKpv))).ToString());
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.dOtsus_kpv");
            if (clazz.TtKokkudOtsusKpv!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "date");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdDate(((System.DateTime)(clazz.TtKokkudOtsusKpv))).ToString());
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.dJoust_kpv");
            if (clazz.TtKokkudJoustKpv!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "date");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdDate(((System.DateTime)(clazz.TtKokkudJoustKpv))).ToString());
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.dTait_kpv");
            if (clazz.TtKokkudTaitKpv!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "date");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdDate(((System.DateTime)(clazz.TtKokkudTaitKpv))).ToString());
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.dLopp_kpv");
            if (clazz.TtKokkudLoppKpv!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "date");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdDate(((System.DateTime)(clazz.TtKokkudLoppKpv))).ToString());
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.cEelvang");
            if (clazz.TtKokkucEelvang!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "string");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdString(((string)(clazz.TtKokkucEelvang))).ToString());
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("ttKokku.cLisainfo");
            if (clazz.TtKokkucLisainfo!=null) {
                Writer.WriteTypeAttribute("http://www.w3.org/2001/XMLSchema", "string");
                Writer.WriteString(new global::Xtee.Core.Schema.XsdString(((string)(clazz.TtKokkucLisainfo))).ToString());
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("kvalifakatsioon");
            if (clazz.Kvalifakatsioon!=null) {
                Writer.WriteTypeAttribute("http://schemas.xmlsoap.org/soap/encoding/", "Array");
                Writer.WriteArrayTypeAttribute("kvalifakatsiooniandmed", "http://producers.karis.xtee.riik.ee/producer/karis", clazz.Kvalifakatsioon.Count);
                for (int x = 0; ((clazz.Kvalifakatsioon != null) 
                            && (x < clazz.Kvalifakatsioon.Count)); x = (x + 1)) {
                    if (clazz.Kvalifakatsioon[x]!=null) {
                        Writer.WriteStartElement("kvalifakatsioon");
                        global::Xtee.Core.SerializationMetadata metaKvalifakatsioon = this.GetMetaData(clazz.Kvalifakatsioon[x]);
                        Writer.WriteTypeAttribute(metaKvalifakatsioon.TypeQualifiedName.Namespace, metaKvalifakatsioon.TypeQualifiedName.Name);
                        metaKvalifakatsioon.NewSerializer(clazz.Kvalifakatsioon[x]).WriteXml(Writer);
                        Writer.WriteEndElement();
                    }
                }
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("kinnip_koht");
            if (clazz.KinnipKoht!=null) {
                Writer.WriteTypeAttribute("http://schemas.xmlsoap.org/soap/encoding/", "Array");
                Writer.WriteArrayTypeAttribute("kinnip_koht_andmed", "http://producers.karis.xtee.riik.ee/producer/karis", clazz.KinnipKoht.Count);
                for (int x = 0; ((clazz.KinnipKoht != null) 
                            && (x < clazz.KinnipKoht.Count)); x = (x + 1)) {
                    if (clazz.KinnipKoht[x]!=null) {
                        Writer.WriteStartElement("kinnip_koht");
                        global::Xtee.Core.SerializationMetadata metaKinnipKoht = this.GetMetaData(clazz.KinnipKoht[x]);
                        Writer.WriteTypeAttribute(metaKinnipKoht.TypeQualifiedName.Namespace, metaKinnipKoht.TypeQualifiedName.Name);
                        metaKinnipKoht.NewSerializer(clazz.KinnipKoht[x]).WriteXml(Writer);
                        Writer.WriteEndElement();
                    }
                }
            }
            else {
                Writer.WriteAttributeString("xsi", "nil", null, "1");
            }
            Writer.WriteEndElement();
        }
        
        public override void ReadXml(global::Xtee.Core.IXteeXmlReader Reader) {
            base.ReadXml(Reader);
        START:
            if ((Reader.LocalName == "ttKokku.cKar_tyyp")) {
                goto ttKokkucKar_tyyp;
            }
            else {
                if ((Reader.LocalName == "ttKokku.cKar_olek")) {
                    goto ttKokkucKar_olek;
                }
                else {
                    if ((Reader.LocalName == "ttKokku.cOtsus_liik")) {
                        goto ttKokkucOtsus_liik;
                    }
                    else {
                        if ((Reader.LocalName == "ttKokku.cOtsustaja")) {
                            goto ttKokkucOtsustaja;
                        }
                        else {
                            if ((Reader.LocalName == "ttKokku.cAsja_nr")) {
                                goto ttKokkucAsja_nr;
                            }
                            else {
                                if ((Reader.LocalName == "ttKokku.cKohtu_asja_nr")) {
                                    goto ttKokkucKohtu_asja_nr;
                                }
                                else {
                                    if ((Reader.LocalName == "ttKokku.dRik_kpv")) {
                                        goto ttKokkudRik_kpv;
                                    }
                                    else {
                                        if ((Reader.LocalName == "ttKokku.dAeg_kpv")) {
                                            goto ttKokkudAeg_kpv;
                                        }
                                        else {
                                            if ((Reader.LocalName == "ttKokku.dOtsus_kpv")) {
                                                goto ttKokkudOtsus_kpv;
                                            }
                                            else {
                                                if ((Reader.LocalName == "ttKokku.dJoust_kpv")) {
                                                    goto ttKokkudJoust_kpv;
                                                }
                                                else {
                                                    if ((Reader.LocalName == "ttKokku.dTait_kpv")) {
                                                        goto ttKokkudTait_kpv;
                                                    }
                                                    else {
                                                        if ((Reader.LocalName == "ttKokku.dLopp_kpv")) {
                                                            goto ttKokkudLopp_kpv;
                                                        }
                                                        else {
                                                            if ((Reader.LocalName == "ttKokku.cEelvang")) {
                                                                goto ttKokkucEelvang;
                                                            }
                                                            else {
                                                                if ((Reader.LocalName == "ttKokku.cLisainfo")) {
                                                                    goto ttKokkucLisainfo;
                                                                }
                                                                else {
                                                                    if ((Reader.LocalName == "kvalifakatsioon")) {
                                                                        goto kvalifakatsioon;
                                                                    }
                                                                    else {
                                                                        if ((Reader.LocalName == "kinnip_koht")) {
                                                                            goto kinnip_koht;
                                                                        }
                                                                        else {
                                                                            return;
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        ttKokkucKar_tyyp:
            if (Reader.IsElementNil()) {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>karistusandmed>ttKokku.cKar_tyyp");
            }
            clazz.TtKokkucKarTyyp = new global::Xtee.Core.Schema.XsdString(Reader.ReadElementString("ttKokku.cKar_tyyp")).Value;
            goto START;
        ttKokkucKar_olek:
            if (Reader.IsElementNil()) {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>karistusandmed>ttKokku.cKar_olek");
            }
            clazz.TtKokkucKarOlek = new global::Xtee.Core.Schema.XsdString(Reader.ReadElementString("ttKokku.cKar_olek")).Value;
            goto START;
        ttKokkucOtsus_liik:
            if (Reader.IsElementNil()) {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>karistusandmed>ttKokku.cOtsus_liik");
            }
            clazz.TtKokkucOtsusLiik = new global::Xtee.Core.Schema.XsdString(Reader.ReadElementString("ttKokku.cOtsus_liik")).Value;
            goto START;
        ttKokkucOtsustaja:
            if ((Reader.IsElementNil() == false)) {
                clazz.TtKokkucOtsustaja = new global::Xtee.Core.Schema.XsdString(Reader.ReadElementString("ttKokku.cOtsustaja")).Value;
            }
            else {
                Reader.Skip();
            }
            goto START;
        ttKokkucAsja_nr:
            if ((Reader.IsElementNil() == false)) {
                clazz.TtKokkucAsjaNr = new global::Xtee.Core.Schema.XsdString(Reader.ReadElementString("ttKokku.cAsja_nr")).Value;
            }
            else {
                Reader.Skip();
            }
            goto START;
        ttKokkucKohtu_asja_nr:
            if ((Reader.IsElementNil() == false)) {
                clazz.TtKokkucKohtuAsjaNr = new global::Xtee.Core.Schema.XsdString(Reader.ReadElementString("ttKokku.cKohtu_asja_nr")).Value;
            }
            else {
                Reader.Skip();
            }
            goto START;
        ttKokkudRik_kpv:
            if ((Reader.IsElementNil() == false)) {
                clazz.TtKokkudRikKpv = new global::Xtee.Core.Schema.XsdDate(Reader.ReadElementString("ttKokku.dRik_kpv")).Value;
            }
            else {
                Reader.Skip();
            }
            goto START;
        ttKokkudAeg_kpv:
            if ((Reader.IsElementNil() == false)) {
                clazz.TtKokkudAegKpv = new global::Xtee.Core.Schema.XsdDate(Reader.ReadElementString("ttKokku.dAeg_kpv")).Value;
            }
            else {
                Reader.Skip();
            }
            goto START;
        ttKokkudOtsus_kpv:
            if ((Reader.IsElementNil() == false)) {
                clazz.TtKokkudOtsusKpv = new global::Xtee.Core.Schema.XsdDate(Reader.ReadElementString("ttKokku.dOtsus_kpv")).Value;
            }
            else {
                Reader.Skip();
            }
            goto START;
        ttKokkudJoust_kpv:
            if ((Reader.IsElementNil() == false)) {
                clazz.TtKokkudJoustKpv = new global::Xtee.Core.Schema.XsdDate(Reader.ReadElementString("ttKokku.dJoust_kpv")).Value;
            }
            else {
                Reader.Skip();
            }
            goto START;
        ttKokkudTait_kpv:
            if ((Reader.IsElementNil() == false)) {
                clazz.TtKokkudTaitKpv = new global::Xtee.Core.Schema.XsdDate(Reader.ReadElementString("ttKokku.dTait_kpv")).Value;
            }
            else {
                Reader.Skip();
            }
            goto START;
        ttKokkudLopp_kpv:
            if ((Reader.IsElementNil() == false)) {
                clazz.TtKokkudLoppKpv = new global::Xtee.Core.Schema.XsdDate(Reader.ReadElementString("ttKokku.dLopp_kpv")).Value;
            }
            else {
                Reader.Skip();
            }
            goto START;
        ttKokkucEelvang:
            if ((Reader.IsElementNil() == false)) {
                clazz.TtKokkucEelvang = new global::Xtee.Core.Schema.XsdString(Reader.ReadElementString("ttKokku.cEelvang")).Value;
            }
            else {
                Reader.Skip();
            }
            goto START;
        ttKokkucLisainfo:
            if ((Reader.IsElementNil() == false)) {
                clazz.TtKokkucLisainfo = new global::Xtee.Core.Schema.XsdString(Reader.ReadElementString("ttKokku.cLisainfo")).Value;
            }
            else {
                Reader.Skip();
            }
            goto START;
        kvalifakatsioon:
            if ((Reader.IsElementNil() == false)) {
                clazz.Kvalifakatsioon = new System.Collections.Generic.List<global::Producers.Karis.Xtee.Riik.Ee.Producer.Karis.IKvalifakatsiooniandmed>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("kvalifakatsioon");
                    for (; ((Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                                && (Reader.LocalName == "kvalifakatsioon")); ) {
                        if (Reader.IsElementNil()) {
                            throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>>karistusandmed>kvalifakatsioon>kvalifakatsioon");
                        }
                        global::Xtee.Core.SerializationMetadata metaKvalifakatsioon = this.GetMetaData<global::Producers.Karis.Xtee.Riik.Ee.Producer.Karis.IKvalifakatsiooniandmed>(Reader, "kvalifakatsiooniandmed", "http://producers.karis.xtee.riik.ee/producer/karis");
                        global::Producers.Karis.Xtee.Riik.Ee.Producer.Karis.IKvalifakatsiooniandmed item = metaKvalifakatsioon.NewEntity<global::Producers.Karis.Xtee.Riik.Ee.Producer.Karis.IKvalifakatsiooniandmed>();
                        clazz.Kvalifakatsioon.Add(item);
                        if ((Reader.IsEmptyElement == false)) {
                            Reader.ReadStartElement("kvalifakatsioon");
                            metaKvalifakatsioon.NewSerializer(item).ReadXml(Reader);
                            Reader.ReadEndElement();
                        }
                        else {
                            Reader.Skip();
                        }
                    }
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                Reader.Skip();
            }
            goto START;
        kinnip_koht:
            if ((Reader.IsElementNil() == false)) {
                clazz.KinnipKoht = new System.Collections.Generic.List<global::Producers.Karis.Xtee.Riik.Ee.Producer.Karis.IKinnipKohtAndmed>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("kinnip_koht");
                    for (; ((Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                                && (Reader.LocalName == "kinnip_koht")); ) {
                        if (Reader.IsElementNil()) {
                            throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>>karistusandmed>kinnip_koht>kinnip_koht");
                        }
                        global::Xtee.Core.SerializationMetadata metaKinnipKoht = this.GetMetaData<global::Producers.Karis.Xtee.Riik.Ee.Producer.Karis.IKinnipKohtAndmed>(Reader, "kinnip_koht_andmed", "http://producers.karis.xtee.riik.ee/producer/karis");
                        global::Producers.Karis.Xtee.Riik.Ee.Producer.Karis.IKinnipKohtAndmed item = metaKinnipKoht.NewEntity<global::Producers.Karis.Xtee.Riik.Ee.Producer.Karis.IKinnipKohtAndmed>();
                        clazz.KinnipKoht.Add(item);
                        if ((Reader.IsEmptyElement == false)) {
                            Reader.ReadStartElement("kinnip_koht");
                            metaKinnipKoht.NewSerializer(item).ReadXml(Reader);
                            Reader.ReadEndElement();
                        }
                        else {
                            Reader.Skip();
                        }
                    }
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                Reader.Skip();
            }
            goto START;
        }
    }
}
